home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48_1 / phone < prev    next >
Text File  |  1995-03-31  |  6KB  |  293 lines

  1. Article 6316 of comp.sys.handhelds:
  2. Path: en.ecn.purdue.edu!noose.ecn.purdue.edu!samsung!uunet!stanford.edu!agate!usenet.ins.cwru.edu!po.CWRU.Edu!rkb
  3. From: rkb@po.CWRU.Edu (Robert K. Brunner)
  4. Newsgroups: comp.sys.handhelds
  5. Subject: HP48 phonebook/list program
  6. Message-ID: <1991Apr29.195912.3050@usenet.ins.cwru.edu>
  7. Date: 29 Apr 91 19:59:12 GMT
  8. Sender: news@usenet.ins.cwru.edu
  9. Reply-To: brunner@uirvld.csl.uiuc.edu (Robert K. Brunner)
  10. Organization: Case Western Reserve University, Cleveland, Ohio, (USA)
  11. Lines: 278
  12. Nntp-Posting-Host: cwns5.ins.cwru.edu
  13.  
  14.  
  15. Hello.
  16.  
  17. For some time I have been looking for a little list manager program
  18. to let me store phone numbers or lists on my HP48.  With no memory cards,
  19. I was looking for something small.  I couldn't find any I liked, so
  20. I wrote my own.  The program is based on an index-card metaphor.
  21. Cards are indexed by their first line.  To save memory, I made extensive
  22. use of the INPUT command rather than writing my own editor.  The whole
  23. program is only 2300 bytes (without data)
  24.  
  25. Operation:
  26.  
  27. Download the directory to the 48.  Go into the directory and then into
  28. the FILES subdirectory.  Enter a quoted variable name for the database
  29. and press CARDS.
  30.  
  31. If the database does not exist, a null list will be created and stored
  32. in the variable.  Then the card viewer will start.  The following commands
  33. work in the viewer:
  34.  
  35. Up arrow    - Scroll current card up.
  36. Down arrow  - Scroll current card down.
  37. Left arrow  - Move to previous card.
  38. Right arrow - Move to next card.
  39. ADD         - Add a new card.  Initially the database is empty, so this
  40.               will be the only valid option.
  41. EDIT        - Edit the contents of the current card.  The title line cannot
  42.               be changed.  To change the title, delete the card with DEL
  43.               and retype it using ADD.
  44. DEL         - Delete current card.
  45. FIND        - Search cards for a matching (or closest) title.  FIND prompts
  46.               the user for the search text.
  47. SAVE        - Save the database back to the variable name.  The program
  48.               works on a copy of the database, so if you make a mistake,
  49.               you can just QUIT without changing the database
  50. QUIT        - Quit the card viewer.  The current database is not saved,
  51.               so SAVE should be done before QUIT to keep any changes.
  52.  
  53. Let me know if you use this program.  There are lots of ways it
  54. can be extended, but life is short and SRAM expensive.  The error
  55. checking is nonexistent, which is why I make the user execute SAVE
  56. explicitly so the database does not become corrupted if something
  57. strange happens.
  58.  
  59. Robert Brunner
  60. brunner@uirvld.csl.uiuc.edu
  61.  
  62. Here is the program:
  63. ----------
  64. %%HP: T(3)A(D)F(.);
  65. DIR
  66.   FILES
  67.     DIR
  68.       CARDS
  69.         \<< RCWS 64
  70. STWS RCLF ROT
  71.           IF DUP
  72. VTYPE -1 ==
  73.           THEN DUP
  74. { } SWAP STO
  75.           END CVIEW
  76. STOF STWS
  77.         \>>
  78.     END
  79.   CVIEW
  80.     \<< DUP RCL DUP
  81. SIZE ROT 1 DUP DUP
  82. 0 DUP DUP DUP \->
  83. imax fnm i jmax j
  84. ti tx txi txl
  85.       \<< { "ADD"
  86. "EDIT" "DEL" "FIND"
  87. "SAVE" "QUIT" }
  88. TMENU 11 SF 10 CF
  89.         DO
  90.           IF imax
  91.           THEN
  92.             IF 11
  93. FS?C
  94.             THEN
  95. CLLCD DUP i cGET
  96. 'jmax' STO 'txl'
  97. STO 'txi' STO 'tx'
  98. STO DUP 1 DISP 'ti'
  99. STO
  100.             END tx
  101. txi j txl ROT ROT
  102. GET SWAP SUB 2 DISP
  103.           ELSE
  104. CLLCD "Empty file"
  105. 2 DISP 11 CF 0
  106. 'jmax' STO
  107.           END -1
  108. WAIT
  109.           CASE DUP
  110. 25.1 ==
  111.             THEN
  112.               IF j
  113. 1 >
  114.               THEN
  115. 'j' DECR DROP
  116.               ELSE
  117. eBEEP
  118.               END
  119.             END DUP
  120. 35.1 ==
  121.             THEN
  122.               IF j
  123. 5 + jmax <
  124.               THEN
  125. 'j' INCR DROP
  126.               ELSE
  127. eBEEP
  128.               END
  129.             END DUP
  130. 34.1 ==
  131.             THEN
  132.               IF i
  133. 1 >
  134.               THEN
  135. 1 'j' STO 'i' DECR
  136. DROP 11 SF
  137.               ELSE
  138. eBEEP
  139.               END
  140.             END DUP
  141. 36.1 ==
  142.             THEN
  143.               IF i
  144. imax <
  145.               THEN
  146. 1 'j' STO 'i' INCR
  147. DROP 11 SF
  148.               ELSE
  149. eBEEP
  150.               END
  151.             END DUP
  152. 11.1 ==
  153.             THEN
  154. DROP icADD 'i' STO
  155. 11 SF 'imax' INCR
  156.             END DUP
  157. 12.1 ==
  158.             THEN
  159.               IF
  160. imax
  161.               THEN
  162. DROP i icED 11 SF 0
  163.               ELSE
  164. eBEEP
  165.               END
  166.             END DUP
  167. 13.1 ==
  168.             THEN
  169.               IF
  170. imax
  171.               THEN
  172. DROP i cDEL 1 'j'
  173. STO 'imax' DECR
  174. IF i <
  175. THEN 'i' DECR
  176. ELSE 0
  177. END 11 SF
  178.               ELSE
  179. eBEEP
  180.               END
  181.             END DUP
  182. 14.1 ==
  183.             THEN
  184.               IF
  185. imax
  186.               THEN
  187. DROP DUP "Title:" {
  188. \Ga } INPUT cFIND
  189. IF DUP imax <
  190. THEN 1 +
  191. END 'i' STO 11 SF 0
  192.               ELSE
  193. eBEEP
  194.               END
  195.             END DUP
  196. 15.1 ==
  197.             THEN
  198. DROP DUP fnm STO 0
  199.             END DUP
  200. 16.1 ==
  201.             THEN 10
  202. SF
  203.             END
  204.           END DROP
  205.         UNTIL 10
  206. FS?
  207.         END DROP 0
  208. MENU
  209.       \>>
  210.     \>>
  211.   icADD
  212.     \<< DUP SIZE
  213. "Title:" { \Ga }
  214. INPUT DUP ":" + { \Ga
  215. } INPUT \-> tit tx
  216.       \<<
  217.         IF NOT
  218.         THEN 0
  219.         ELSE DUP
  220. tit cFIND
  221.         END SWAP
  222. OVER tit tx 2 \->LIST
  223. cADD SWAP 1 +
  224.       \>>
  225.     \>>
  226.   icED
  227.     \<< \-> i
  228.       \<< DUP i GET
  229. DUP OBJ\-> DROP SWAP
  230. ":" + SWAP { \Ga } +
  231. INPUT 2 SWAP PUT i
  232. SWAP PUT
  233.       \>>
  234.     \>>
  235.   eBEEP
  236.     \<< 440 .1 BEEP
  237.     \>>
  238.   cGET
  239.     \<< GET OBJ\-> DROP
  240. SWAP ":" + SWAP DUP
  241. DUP SIZE { 1 } \-> sz
  242. txi
  243.       \<<
  244.         WHILE DUP
  245. "
  246. " POS DUP
  247.         REPEAT SWAP
  248. OVER " " REPL SWAP
  249. 1 + 'txi' SWAP STO+
  250.         END DROP2
  251. txi sz OVER SIZE
  252.       \>>
  253.     \>>
  254.   cADD
  255.     \<< \-> i new
  256.       \<< OBJ\-> \-> n
  257.         \<< new 'n'
  258. INCR i - ROLLD n
  259. \->LIST
  260.         \>>
  261.       \>>
  262.     \>>
  263.   cFIND
  264.     \<< \-> str
  265.       \<< { "" } SWAP
  266. OBJ\-> DUP \-> n i
  267.         \<<
  268.           IF n
  269.           THEN
  270.             WHILE 1
  271. GET str \>= i AND
  272.             REPEAT
  273. 'i' DECR DROP
  274.             END
  275.           END i
  276. DROPN i
  277.         \>>
  278.       \>>
  279.     \>>
  280.   cDEL
  281.     \<< \-> i
  282.       \<< OBJ\-> \-> n
  283.         \<< n i - 1 +
  284. ROLL DROP n 1 -
  285. \->LIST
  286.         \>>
  287.       \>>
  288.     \>>
  289. END
  290. ---------
  291.  
  292.  
  293.